home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / phagexsources.lha / codesegments / VektorDrive-Seg.s < prev    next >
Encoding:
Text File  |  1993-08-21  |  6.4 KB  |  427 lines

  1.     Opt    c-
  2.     Section    "Vektor Zoomer",Code_c
  3.     
  4. InvertBlock    = 0
  5.  
  6.     IncDir    TransorbSource:
  7.  
  8. Start    Bra.s    SetNewObject
  9.     Bra.s    CLSDoubleBuffer
  10.     Bra    DoObject
  11.     
  12. SetNewObject    Lea    ObjectPt(pc),a1
  13.     Move.l    a0,(a1)
  14.     Moveq    #0,d0
  15.     Move.w    (a0),d0
  16.     Asl.w    #2,d0
  17.     Move.l    a0,a2
  18.     Addq    #2,a2
  19.     Add.l    d0,a2
  20.     Lea    ConnectPt(pc),a3
  21.     Move.l    a2,(a3)
  22.     Rts
  23.  
  24. CLSDoubleBuffer    Bsr    ClsBlock
  25.     Lea    Altern8(pc),a0
  26.     Bchg    #0,(a0)
  27.     Rts
  28.     
  29. DoObject    Lea    ScreenBase(pc),a6
  30.     Move.l    a0,(a6)+
  31.     Move.l    a0,(a6)
  32.     Lea    XSize(pc),a6
  33.     Move.w    d0,0(a6)
  34.     Move.w    d1,2(a6)
  35.     Bsr    Rotate
  36.     Bsr    DrawLines
  37.     Bsr    FillBlock
  38.     Rts
  39.     
  40. WaitBlitter    Btst    #14,$02(a6)
  41.     Btst    #14,$02(a6)
  42.     Bne    WaitBlitter
  43.     Rts
  44.  
  45. ClsBlock    Move.l    a0,d0
  46.     Lea    Altern8(pc),a0
  47.     Btst    #0,(a0)
  48.     Bne    ClsMap1
  49.     
  50. ClsMap0    Lea    MaxXStart(pc),a0
  51.     Bra    ClsMap
  52. ClsMap1    Lea    MaxXStart1(pc),a0
  53.     
  54. ClsMap    Moveq    #0,d1
  55.     Moveq    #0,d2
  56.     Moveq    #0,d5
  57.     
  58.     Move.w    4(a0),d1
  59.     Move.w    6(a0),d5
  60.     Sub.w    d1,d5
  61.     Add.w    #1,d5
  62.     Asl.w    #6,d5
  63.     Moveq    #44,d3
  64.     Muls    d1,d3
  65.     Add.l    d3,d0
  66.     Move.w    0(a0),d1
  67.     Move.w    2(a0),d2
  68.     Asr.w    #3,d1
  69.     Asr.w    #3,d2
  70.     And.w    #$0ffe,d1
  71.     And.w    #$0ffe,d2
  72.     Add.l    d1,d0
  73.     Sub.w    d1,d2
  74.     Add.w    #2,d2
  75.     Moveq    #44,d4
  76.     Sub.w    d2,d4
  77.     Asr.w    #1,d2
  78.     Or.w    d2,d5    
  79.     
  80.     Lea    $Dff000,a6
  81.     Bsr    WaitBlitter
  82.     Move.l    #-1,BltAFWM(a6)
  83.     Move.l    #$01000000,BltCon0(a6)
  84.     Move.w    d4,BltDMod(a6)
  85.     Move.l    d0,BltDPth(a6)
  86.     Move.w    d5,BltSize(a6)
  87.     Rts    
  88.  
  89. FillBlock    Move.l    Screen(pc),d0    
  90.     Lea    Altern8(pc),a0
  91.     Btst    #0,(a0)
  92.     Beq    FillMap1
  93.     
  94. FillMap0    Lea    MaxXStart(pc),a0
  95.     Bra    FillMap
  96. FillMap1    Lea    MaxXStart1(pc),a0
  97.     
  98. FillMap    Moveq    #0,d1
  99.     Moveq    #0,d2
  100.     Moveq    #0,d5
  101.     
  102.     Move.w    4(a0),d1
  103.     Move.w    6(a0),d5
  104.     Sub.w    d1,d5
  105.     Asl.w    #6,d5
  106.     Moveq    #44,d3
  107.     Move.w    6(a0),d1
  108.     Muls    d1,d3
  109.     Add.l    d3,d0
  110.     Move.w    0(a0),d1
  111.     Move.w    2(a0),d2
  112.     Asr.w    #3,d1
  113.     Asr.w    #3,d2
  114.     And.w    #$0ffe,d1
  115.     And.w    #$0ffe,d2
  116.     Add.l    d2,d0
  117.     Sub.w    d1,d2
  118.     Add.w    #2,d2
  119.     Moveq    #44,d4
  120.     Sub.w    d2,d4
  121.     Asr.w    #1,d2
  122.     Or.w    d2,d5    
  123.     
  124.     Lea    $Dff000,a6
  125.     Bsr    WaitBlitter
  126.     Move.l    #-1,BltAFWM(a6)
  127.     Move.l    #$09f0000a+(InvertBlock*4),BltCon0(a6)
  128.     Move.w    d4,BltDMod(a6)
  129.     Move.w    d4,BltAMod(a6)
  130.     Move.l    d0,BltDPth(a6)
  131.     Move.l    d0,BltAPth(a6)
  132.     Move.w    d5,BltSize(a6)
  133.     Rts    
  134.  
  135. Rotate    Bsr    SetMax
  136.     Lea    RotPoints(pc),a0            ; Dest For Points
  137.     Move.l    ObjectPt(pc),a1    
  138.     Lea    XSize(pc),a2
  139.     Move.w    (a1)+,d7            ; Number Of Points
  140.     Sub.w    #1,d7
  141.     
  142. Calculate    Move.w    (a1)+,d0            ; Get X
  143.     Move.w    (a1)+,d1            ; Get Y
  144.  
  145.     And.w    #1023,0(a2)
  146.     And.w    #1023,2(a2)
  147.     
  148.     Move.w    0(a2),d2
  149.     Move.w    2(a2),d3
  150.     
  151.     Muls    d2,d0
  152.     Muls    d3,d1
  153.  
  154.     Asr.l    #8,d0
  155.     Asr.l    #8,d1
  156.  
  157.     Asr.l    #2,d0
  158.     Asr.l    #2,d1
  159.     
  160.     Add.w    #160,d0
  161.     Add.w    #128,d1
  162.     Move.w    d0,(a0)+
  163.     Move.w    d1,(a0)+
  164.     Bsr    FindMax
  165.     Dbf    d7,Calculate
  166.     Rts
  167.  
  168. DrawLines    Lea    RotPoints(pc),A3            ; Pointer To Points
  169.     Lea    ConnectPt(pc),A4            ; Pointer To Connects
  170.     Move.l    (a4),a4
  171.     Move.w    (a4)+,D7            ; Number Of Connects
  172.     Sub.w    #1,d7
  173.     
  174. DrawLoop    Move.w    (a4)+,d4            ; Conect These
  175.     Asl.w    #2,d4
  176.     Move.w    (a3,d4),D0            ; Get X
  177.     Move.w    2(a3,d4),D1            ; Get Y
  178.     Move.w    (a4)+,d4            ; Conect These
  179.     Asl.w    #2,d4
  180.     Move.w    (a3,d4),D2            ; Get X1
  181.     Move.w    2(a3,d4),D3            ; Get Y1
  182.     Movem.l    d0-d7/a0-a6,-(sp)
  183.     Bsr    Vec
  184.     Movem.l    (sp)+,d0-d7/a0-a6
  185.     Dbf    d7,DrawLoop    
  186.     Rts
  187.  
  188. SetMax    Lea    Altern8(pc),a0
  189.     Btst    #0,(a0)
  190.     Beq    SetMax1
  191.     
  192. SetMax0    Lea    MaxXStart(pc),a0
  193.     Bra    SetMaxDone
  194. SetMax1    Lea    MaxXStart1(pc),a0
  195.     
  196. SetMaxDone    Move.w    #160,0(a0)
  197.     Move.w    #160,2(a0)
  198.     Move.w    #128,4(a0)
  199.     Move.w    #128,6(a0)
  200.     Rts
  201.     
  202. FindMax    Movem.l    d0-d3/a0,-(sp)
  203.     Lea    Altern8(pc),a0
  204.     Btst    #0,(a0)
  205.     Beq    FindMax1
  206.     
  207. FindMax0    Lea    MaxXStart(pc),a0
  208.     Bra    FindMaxDone
  209. FindMax1    Lea    MaxXStart1(pc),a0
  210.     
  211. FindMaxDone    Move.w    0(a0),d2
  212.     Cmp.w    d2,d0
  213.     Ble    SetNewMaxXStart
  214. FindXStop    Move.w    2(a0),d2
  215.     Cmp.w    d0,d2
  216.     Ble    SetNewMaxXStop
  217. FindYStart    Move.w    4(a0),d2
  218.     Cmp.w    d2,d1
  219.     Ble    SetNewMaxYStart
  220. FindYStop    Move.w    6(a0),d2
  221.     Cmp.w    d1,d2
  222.     Ble    SetNewMaxYStop
  223. FoundMax    Movem.l    (sp)+,d0-d3/a0
  224.     Rts
  225.     
  226. SetNewMaxXStart    Move.w    d0,0(a0)
  227.     Bra    FindXStop
  228. SetNewMaxXStop    Move.w    d0,2(a0)
  229.     Bra    FindYStart
  230. SetNewMaxYStart    Move.w    d1,4(a0)
  231.     Bra    FindYStop
  232. SetNewMaxYStop    Move.w    d1,6(a0)
  233.     Bra    FoundMax
  234.  
  235. vec    Move.l    Screen(pc),a0
  236.     Lea    $Dff000,a6
  237.     Move.l    #44,D5                ; 40 Bytes accross
  238.     Bsr    WaitBlitter
  239.     Move.w    d5,$60(a6)            ; Screen In Bytes
  240.     Move.l    #-$8000,$72(a6)            ; Set to line ??????
  241.     Move.l    #-1,$44(a6)            ; The Mask
  242.     cmp.w    d1,d3
  243.     bgt.s    line1
  244.     exg    d0,d2
  245.     exg    d1,d3
  246.     beq.s    out
  247. line1    move.w    d1,d4
  248.     muls    d5,d4
  249.     move.w    d0,d5
  250.     add.l    a0,d4
  251.     asr.w    #3,d5
  252.     add.w    d5,d4
  253.     moveq    #0,d5
  254.     sub.w    d1,d3
  255.     sub.w    d0,d2
  256.     bpl.s    line2
  257.     moveq    #1,d5
  258.     neg.w    d2
  259. line2    move.w    d3,d1
  260.     add.w    d1,d1
  261.     cmp.w    d2,d1
  262.     dbhi    d3,line3
  263. line3    move.w    d3,d1
  264.     sub.w    d2,d1
  265.     bpl.s    line4
  266.     exg    d2,d3
  267. line4    addx.w    d5,d5
  268.     add.w    d2,d2
  269.     move.w    d2,d1
  270.     sub.w    d3,d2
  271.     addx.w    d5,d5
  272.     and.w    #15,d0
  273.     ror.w    #4,d0
  274.     or.w    #$a4a,d0
  275.     move.w    d2,$52(a6)
  276.     sub.w    d3,d2
  277.     lsl.w    #6,d3
  278.     addq.w    #2,d3
  279.     move.w    d0,$40(a6)
  280.     move.b    oct(PC,d5.w),$43(a6)
  281.     move.l    d4,$48(a6)
  282.     move.l    d4,$54(a6)
  283.     movem.w    d1/d2,$62(a6)
  284.     move.w    d3,$58(a6)
  285. out    Rts
  286.     
  287. oct    dc.l    $3431353,$b4b1757   
  288.  
  289. ScreenBase    Dc.l    0
  290. Screen    Dc.l    0
  291. Altern8    Dc.w    0
  292. CopPlane    Dc.w    0
  293. ObjectPt    Dc.l    0
  294. ConnectPt    Dc.l    0
  295.  
  296. XSize    Dc.w    1000
  297. YSize    Dc.w    1000
  298.  
  299. MaxXStart    Dc.w    160
  300. MaxXStop    Dc.w    160
  301. MaxYStart    Dc.w    128
  302. MaxYStop    Dc.w    128
  303.  
  304. MaxXStart1    Dc.w    160
  305. MaxXStop1    Dc.w    160
  306. MaxYStart1    Dc.w    128
  307. MaxYStop1    Dc.w    128
  308.  
  309. RotPoints    Ds.w    240
  310.  
  311. ****Custom Chip Registers****
  312.  
  313. ;Control Registers
  314.  
  315. Dmaconr    = $002
  316. Vposr    = $004
  317. Vhposr    = $006
  318. Joy0dat    = $00A
  319. Joy1dat    = $00C
  320. Clxdat    = $00E
  321. Intenar    = $01C
  322. Intereqr    = $01E
  323. Copcon    = $02E
  324.  
  325. ;Blitter Registers
  326.  
  327. Bltcon0    = $040
  328. Bltcon1    = $042
  329. Bltafwm    = $044
  330. Bltalwm    = $046
  331. Bltcpth    = $048
  332. Bltcptl    = $04A
  333. Bltbpth    = $04C
  334. Bltbptl    = $04E
  335. Bltapth    = $050
  336. Bltaptl    = $052
  337. Bltdpth    = $054
  338. Bltdptl    = $056
  339. Bltsize    = $058
  340. Bltcmod    = $060
  341. Bltbmod    = $062
  342. Bltamod    = $064
  343. Bltdmod    = $066
  344. Bltcdat    = $070
  345. Bltbdat    = $072
  346. Bltadat    = $074
  347.  
  348. ;Copper Registers
  349.  
  350. Cop1lc    = $080
  351. Cop1lch    = $080
  352. Cop1lcl    = $082
  353. Cop2lc    = $084
  354. Cop2lch    = $084
  355. Cop2lcl    = $086
  356. Copjmp1    = $088
  357. Copjmp2    = $08A
  358. Diwstrt    = $08E
  359. Diwstop    = $090
  360. Ddfstrt    = $092
  361. Ddfstop    = $094
  362. Dmacon    = $096
  363. Clxcon    = $098
  364. Intena    = $09A
  365. Intreq    = $09C
  366.  
  367. ;BitPlane Registers 
  368.  
  369. BplCon0    = $100
  370. BplCon1    = $102
  371. BplCon2    = $104
  372. BplMod1    = $108
  373. BplMod2    = $10a
  374.  
  375. BplPt0h    = $0e0
  376. BplPt0l    = $0e2
  377. BplPt1h    = $0e4
  378. BplPt1l    = $0e6
  379. BplPt2h    = $0e8
  380. BplPt2l    = $0ea
  381. BplPt3h    = $0ec
  382. BplPt3l    = $0ee
  383. BplPt4h    = $0f0
  384. BplPt4l    = $0f2
  385. BplPt5h    = $0f4
  386. BplPt5l    = $0f6
  387.  
  388. ;Colorour Registers
  389.  
  390. Color00    = $180
  391. Color01    = $182
  392. Color02    = $184
  393. Color03    = $186
  394. Color04    = $188
  395. Color05    = $18a
  396. Color06    = $18c
  397. Color07    = $18e
  398. Color08    = $190
  399. Color09    = $192
  400. Color10    = $194
  401. Color11    = $196
  402. Color12    = $198
  403. Color13     = $19a
  404. Color14     = $19c
  405. Color15     = $19e
  406. Color16     = $1a0
  407. Color17     = $1a2
  408. Color18     = $1a4
  409. Color19     = $1a6
  410. Color20     = $1a8
  411. Color21     = $1aa
  412. Color22     = $1ac
  413. Color23     = $1ae
  414. Color24     = $1b0
  415. Color25     = $1b2
  416. Color26     = $1b4
  417. Color27     = $1b6
  418. Color28     = $1b8
  419. Color29     = $1ba
  420. Color30     = $1bc
  421. Color31     = $1be
  422.  
  423. EcsNop    = $1fe
  424.  
  425.  
  426.  
  427.